﻿var UI = {};

UI.Element = function (dom) {

    this.dom = dom;

};

UI.Element.prototype = {

    add: function () {

        for (var i = 0; i < arguments.length; i++) {

            var argument = arguments[i];

            if (argument instanceof UI.Element) {

                this.dom.appendChild(argument.dom);

            } else {

            }

        }

        return this;

    },

    remove: function () {

        for (var i = 0; i < arguments.length; i++) {

            var argument = arguments[i];

            if (argument instanceof UI.Element) {

                this.dom.removeChild(argument.dom);

            } else {
            }

        }

        return this;

    },

    clear: function () {

        while (this.dom.children.length) {

            this.dom.removeChild(this.dom.lastChild);

        }

    },

    setId: function (id) {

        this.dom.id = id;

        return this;

    },

    setClass: function (name) {

        this.dom.className = name;

        return this;

    },

    setStyle: function (style, array) {

        for (var i = 0; i < array.length; i++) {

            this.dom.style[style] = array[i];

        }

        return this;

    },

    setDisabled: function (value) {

        this.dom.disabled = value;

        return this;

    },

    setTextContent: function (value) {

        this.dom.textContent = value;

        return this;

    }

};
var properties = ['position', 'left', 'top', 'right', 'bottom', 'width', 'height', 'border', 'borderLeft',
'borderTop', 'borderRight', 'borderBottom', 'borderColor', 'display', 'overflow', 'margin', 'marginLeft', 'marginTop', 'marginRight', 'marginBottom', 'padding', 'paddingLeft', 'paddingTop', 'paddingRight', 'paddingBottom', 'color',
'background', 'backgroundColor', 'opacity', 'fontSize', 'fontWeight', 'textAlign', 'textDecoration', 'textTransform', 'cursor', 'zIndex'];

properties.forEach(function (property) {

    var method = 'set' + property.substr(0, 1).toUpperCase() + property.substr(1, property.length);

    UI.Element.prototype[method] = function () {

        this.setStyle(property, arguments);

        return this;

    };

});

var events = ['KeyUp', 'KeyDown', 'MouseOver', 'MouseOut', 'Click', 'DblClick', 'Change'];

events.forEach(function (event) {

    var method = 'on' + event;

    UI.Element.prototype[method] = function (callback) {

        this.dom.addEventListener(event.toLowerCase(), callback.bind(this), false);

        return this;

    };

});

UI.Span = function () {

    UI.Element.call(this);

    this.dom = document.createElement('span');

    return this;

};

UI.Span.prototype = Object.create(UI.Element.prototype);
UI.Span.prototype.constructor = UI.Span;

UI.Div = function () {

    UI.Element.call(this);

    this.dom = document.createElement('div');

    return this;

};

UI.Div.prototype = Object.create(UI.Element.prototype);
UI.Div.prototype.constructor = UI.Div;

UI.Row = function () {

    UI.Element.call(this);

    var dom = document.createElement('div');
    dom.className = 'Row';

    this.dom = dom;

    return this;

};

UI.Row.prototype = Object.create(UI.Element.prototype);
UI.Row.prototype.constructor = UI.Row;


UI.GetRow = function (name) {

    UI.Element.call(this);

    var dom = document.getElementById(name);
    dom.className = 'Row';

    this.dom = dom;

    return this;

};

UI.GetRow.prototype = Object.create(UI.Element.prototype);
UI.GetRow.prototype.constructor = UI.GetRow;

UI.Panel = function () {

    UI.Element.call(this);

    var dom = document.getElementById('ViewPanel');

    this.dom = dom;

    return this;

};

UI.Panel.prototype = Object.create(UI.Element.prototype);
UI.Panel.prototype.constructor = UI.Panel;

UI.Text = function (text) {

    UI.Element.call(this);

    var dom = document.createElement('span');
    dom.className = 'Text';
    dom.style.cursor = 'default';
    dom.style.display = 'inline-block';
    dom.style.verticalAlign = 'middle';

    this.dom = dom;
    this.setValue(text);

    return this;

};

UI.Text.prototype = Object.create(UI.Element.prototype);
UI.Text.prototype.constructor = UI.Text;

UI.Text.prototype.getValue = function () {

    return this.dom.textContent;

};

UI.Text.prototype.setValue = function (value) {

    if (value !== undefined) {

        this.dom.textContent = value;

    }

    return this;

};

UI.Input = function (text) {

    UI.Element.call(this);

    var scope = this;

    var dom = document.createElement('input');
    dom.className = 'Input';
    dom.style.padding = '2px';
    dom.style.border = '1px solid transparent';

    dom.addEventListener('keydown', function (event) {

        event.stopPropagation();

    }, false);

    this.dom = dom;
    this.setValue(text);

    return this;

};

UI.Input.prototype = Object.create(UI.Element.prototype);
UI.Input.prototype.constructor = UI.Input;

UI.Input.prototype.getValue = function () {

    return this.dom.value;

};

UI.Input.prototype.setValue = function (value) {

    this.dom.value = value;

    return this;

};

UI.GetInput = function (text, name) {

    UI.Element.call(this);

    var scope = this;

    var dom = document.getElementById(name);

    dom.addEventListener('keydown', function (event) {

        event.stopPropagation();

    }, false);

    this.dom = dom;
    this.setValue(text);

    return this;

};

UI.GetInput.prototype = Object.create(UI.Element.prototype);
UI.GetInput.prototype.constructor = UI.Input;

UI.GetInput.prototype.getValue = function () {

    return this.dom.value;

};

UI.GetInput.prototype.setValue = function (value) {

    this.dom.value = value;

    return this;

};
UI.TextArea = function () {

    UI.Element.call(this);

    var scope = this;

    var dom = document.createElement('textarea');
    dom.className = 'TextArea';
    dom.style.padding = '2px';
    dom.spellcheck = false;

    dom.addEventListener('keydown', function (event) {

        event.stopPropagation();

        if (event.keyCode === 9) {

            event.preventDefault();

            var cursor = dom.selectionStart;

            dom.value = dom.value.substring(0, cursor) + '\t' + dom.value.substring(cursor);
            dom.selectionStart = cursor + 1;
            dom.selectionEnd = dom.selectionStart;

        }

    }, false);

    this.dom = dom;

    return this;

};

UI.TextArea.prototype = Object.create(UI.Element.prototype);
UI.TextArea.prototype.constructor = UI.TextArea;

UI.TextArea.prototype.getValue = function () {

    return this.dom.value;

};

UI.TextArea.prototype.setValue = function (value) {

    this.dom.value = value;

    return this;

};
UI.Select = function () {

    UI.Element.call(this);

    var scope = this;

    var dom = document.createElement('select');
    dom.className = 'Select';
    dom.style.padding = '2px';

    this.dom = dom;

    return this;

};

UI.Select.prototype = Object.create(UI.Element.prototype);
UI.Select.prototype.constructor = UI.Select;

UI.Select.prototype.setMultiple = function (boolean) {

    this.dom.multiple = boolean;

    return this;

};

UI.Select.prototype.setOptions = function (options) {

    var selected = this.dom.value;

    while (this.dom.children.length > 0) {

        this.dom.removeChild(this.dom.firstChild);

    }

    for (var key in options) {

        var option = document.createElement('option');
        option.value = key;
        option.innerHTML = options[key];
        this.dom.appendChild(option);

    }

    this.dom.value = selected;

    return this;

};

UI.Select.prototype.getValue = function () {

    return this.dom.value;

};

UI.Select.prototype.setValue = function (value) {

    value = String(value);

    if (this.dom.value !== value) {

        this.dom.value = value;

    }

    return this;

};

UI.Checkbox = function (boolean) {

    UI.Element.call(this);

    var scope = this;

    var dom = document.createElement('input');
    dom.className = 'Checkbox';
    dom.type = 'checkbox';

    this.dom = dom;
    this.setValue(boolean);

    return this;

};

UI.Checkbox.prototype = Object.create(UI.Element.prototype);
UI.Checkbox.prototype.constructor = UI.Checkbox;

UI.Checkbox.prototype.getValue = function () {

    return this.dom.checked;

};

UI.Checkbox.prototype.setValue = function (value) {

    if (value !== undefined) {

        this.dom.checked = value;

    }

    return this;

};
UI.GetCheckbox = function (boolean, name) {

    UI.Element.call(this);

    var scope = this;

    var dom = document.getElementById(name);

    this.dom = dom;
    this.setValue(boolean);

    return this;

};

UI.GetCheckbox.prototype = Object.create(UI.Element.prototype);
UI.GetCheckbox.prototype.constructor = UI.GetCheckbox;

UI.GetCheckbox.prototype.getValue = function () {

    return this.dom.checked;

};

UI.GetCheckbox.prototype.setValue = function (value) {

    if (value !== undefined) {

        this.dom.checked = value;

    }

    return this;

};

UI.Color = function () {

    UI.Element.call(this);

    var scope = this;

    var dom = document.createElement('input');
    dom.className = 'Color';
    dom.style.width = '64px';
    dom.style.height = '17px';
    dom.style.border = '0px';
    dom.style.padding = '2px';
    dom.style.backgroundColor = 'transparent';

    try {

        dom.type = 'color';
        dom.value = '#ffffff';

    } catch (exception) { }

    this.dom = dom;

    return this;

};

UI.Color.prototype = Object.create(UI.Element.prototype);
UI.Color.prototype.constructor = UI.Color;

UI.Color.prototype.getValue = function () {

    return this.dom.value;

};

UI.Color.prototype.getHexValue = function () {

    return parseInt(this.dom.value.substr(1), 16);

};

UI.Color.prototype.setValue = function (value) {

    this.dom.value = value;

    return this;

};

UI.Color.prototype.setHexValue = function (hex) {

    this.dom.value = '#' + ('000000' + hex.toString(16)).slice(-6);

    return this;

};
UI.Number = function (number) {

    UI.Element.call(this);

    var scope = this;

    var dom = document.createElement('input');
    dom.className = 'Number';
    dom.value = '0.00';

    dom.addEventListener('keydown', function (event) {

        event.stopPropagation();

        if (event.keyCode === 13) dom.blur();

    }, false);

    this.value = 0;

    this.min = -Infinity;
    this.max = Infinity;

    this.precision = 2;
    this.step = 1;
    this.unit = '';

    this.dom = dom;

    this.setValue(number);

    var changeEvent = document.createEvent('HTMLEvents');
    changeEvent.initEvent('change', true, true);

    var distance = 0;
    var onMouseDownValue = 0;

    var pointer = [0, 0];
    var prevPointer = [0, 0];

    function onMouseDown(event) {

        event.preventDefault();

        distance = 0;

        onMouseDownValue = scope.value;

        prevPointer = [event.clientX, event.clientY];

        document.addEventListener('mousemove', onMouseMove, false);
        document.addEventListener('mouseup', onMouseUp, false);

    }

    function onMouseMove(event) {

        var currentValue = scope.value;

        pointer = [event.clientX, event.clientY];

        distance += (pointer[0] - prevPointer[0]) - (pointer[1] - prevPointer[1]);

        var value = onMouseDownValue + (distance / (event.shiftKey ? 5 : 50)) * scope.step;
        value = Math.min(scope.max, Math.max(scope.min, value));

        if (currentValue !== value) {

            scope.setValue(value);
            dom.dispatchEvent(changeEvent);

        }

        prevPointer = [event.clientX, event.clientY];

    }

    function onMouseUp(event) {

        document.removeEventListener('mousemove', onMouseMove, false);
        document.removeEventListener('mouseup', onMouseUp, false);

        if (Math.abs(distance) < 2) {

            dom.focus();
            dom.select();

        }

    }

    function onChange(event) {

        scope.setValue(dom.value);

    }

    function onFocus(event) {

        dom.style.backgroundColor = '';
        dom.style.cursor = '';

    }

    function onBlur(event) {

        dom.style.backgroundColor = 'transparent';
        dom.style.cursor = 'col-resize';

    }

    onBlur();

    dom.addEventListener('mousedown', onMouseDown, false);
    dom.addEventListener('change', onChange, false);
    dom.addEventListener('focus', onFocus, false);
    dom.addEventListener('blur', onBlur, false);

    return this;

};

UI.Number.prototype = Object.create(UI.Element.prototype);
UI.Number.prototype.constructor = UI.Number;

UI.Number.prototype.getValue = function () {

    return this.value;

};

UI.Number.prototype.setValue = function (value) {

    if (value !== undefined) {

        value = parseFloat(value);

        if (value < this.min) value = this.min;
        if (value > this.max) value = this.max;

        this.value = value;
        this.dom.value = value.toFixed(this.precision);

        if (this.unit !== '') this.dom.value += ' ' + this.unit;

    }

    return this;

};

UI.Number.prototype.setPrecision = function (precision) {

    this.precision = precision;

    return this;

};

UI.Number.prototype.setStep = function (step) {

    this.step = step;

    return this;

};

UI.Number.prototype.setRange = function (min, max) {

    this.min = min;
    this.max = max;

    return this;

};

UI.Number.prototype.setUnit = function (unit) {

    this.unit = unit;

    return this;

};

UI.GetNumber = function (number, name) {

    UI.Element.call(this);

    var scope = this;

    var dom = document.getElementById(name);
    dom.className = 'Number';
    dom.value = '0.0000';

    dom.addEventListener('keydown', function (event) {

        event.stopPropagation();

        if (event.keyCode === 13) dom.blur();

    }, false);

    this.value = 0;

    this.min = -Infinity;
    this.max = Infinity;

    this.precision = 4;
    this.step = 1;
    this.unit = '';

    this.dom = dom;

    this.setValue(number);

    var changeEvent = document.createEvent('HTMLEvents');
    changeEvent.initEvent('change', true, true);

    var distance = 0;
    var onMouseDownValue = 0;

    var pointer = [0, 0];
    var prevPointer = [0, 0];

    function onMouseDown(event) {

        event.preventDefault();

        distance = 0;

        onMouseDownValue = scope.value;

        prevPointer = [event.clientX, event.clientY];

        document.addEventListener('mousemove', onMouseMove, false);
        document.addEventListener('mouseup', onMouseUp, false);

    }

    function onMouseMove(event) {

        var currentValue = scope.value;

        pointer = [event.clientX, event.clientY];

        distance += (pointer[0] - prevPointer[0]) - (pointer[1] - prevPointer[1]);

        var value = onMouseDownValue + (distance / (event.shiftKey ? 5 : 50)) * scope.step;
        value = Math.min(scope.max, Math.max(scope.min, value));

        if (currentValue !== value) {

            scope.setValue(value);
            dom.dispatchEvent(changeEvent);

        }

        prevPointer = [event.clientX, event.clientY];

    }

    function onMouseUp(event) {

        document.removeEventListener('mousemove', onMouseMove, false);
        document.removeEventListener('mouseup', onMouseUp, false);

        if (Math.abs(distance) < 2) {

            dom.focus();
            dom.select();

        }

    }

    function onChange(event) {

        scope.setValue(dom.value);

    }

    function onFocus(event) {

        dom.style.backgroundColor = '';
        dom.style.cursor = '';

    }

    function onBlur(event) {

        dom.style.backgroundColor = 'transparent';
        dom.style.cursor = 'col-resize';

    }

    onBlur();

    dom.addEventListener('mousedown', onMouseDown, false);
    dom.addEventListener('change', onChange, false);
    dom.addEventListener('focus', onFocus, false);
    dom.addEventListener('blur', onBlur, false);

    return this;

};

UI.GetNumber.prototype = Object.create(UI.Element.prototype);
UI.GetNumber.prototype.constructor = UI.Number;

UI.GetNumber.prototype.getValue = function () {

    return this.value;

};

UI.GetNumber.prototype.setValue = function (value) {

    if (value !== undefined) {

        value = parseFloat(value);

        if (value < this.min) value = this.min;
        if (value > this.max) value = this.max;

        this.value = value;
        this.dom.value = value.toFixed(this.precision);

        if (this.unit !== '') this.dom.value += ' ' + this.unit;

    }

    return this;

};

UI.GetNumber.prototype.setPrecision = function (precision) {

    this.precision = precision;

    return this;

};

UI.GetNumber.prototype.setStep = function (step) {

    this.step = step;

    return this;

};

UI.GetNumber.prototype.setRange = function (min, max) {

    this.min = min;
    this.max = max;

    return this;

};

UI.GetNumber.prototype.setUnit = function (unit) {

    this.unit = unit;

    return this;

};

UI.Integer = function (number) {

    UI.Element.call(this);

    var scope = this;

    var dom = document.createElement('input');
    dom.className = 'Number';
    dom.value = '0';

    dom.addEventListener('keydown', function (event) {

        event.stopPropagation();

    }, false);

    this.value = 0;

    this.min = -Infinity;
    this.max = Infinity;

    this.step = 1;

    this.dom = dom;

    this.setValue(number);

    var changeEvent = document.createEvent('HTMLEvents');
    changeEvent.initEvent('change', true, true);

    var distance = 0;
    var onMouseDownValue = 0;

    var pointer = [0, 0];
    var prevPointer = [0, 0];

    function onMouseDown(event) {

        event.preventDefault();

        distance = 0;

        onMouseDownValue = scope.value;

        prevPointer = [event.clientX, event.clientY];

        document.addEventListener('mousemove', onMouseMove, false);
        document.addEventListener('mouseup', onMouseUp, false);

    }

    function onMouseMove(event) {

        var currentValue = scope.value;

        pointer = [event.clientX, event.clientY];

        distance += (pointer[0] - prevPointer[0]) - (pointer[1] - prevPointer[1]);

        var value = onMouseDownValue + (distance / (event.shiftKey ? 5 : 50)) * scope.step;
        value = Math.min(scope.max, Math.max(scope.min, value)) | 0;

        if (currentValue !== value) {

            scope.setValue(value);
            dom.dispatchEvent(changeEvent);

        }

        prevPointer = [event.clientX, event.clientY];

    }

    function onMouseUp(event) {

        document.removeEventListener('mousemove', onMouseMove, false);
        document.removeEventListener('mouseup', onMouseUp, false);

        if (Math.abs(distance) < 2) {

            dom.focus();
            dom.select();

        }

    }

    function onChange(event) {

        scope.setValue(dom.value);

    }

    function onFocus(event) {

        dom.style.backgroundColor = '';
        dom.style.cursor = '';

    }

    function onBlur(event) {

        dom.style.backgroundColor = 'transparent';
        dom.style.cursor = 'col-resize';

    }

    onBlur();

    dom.addEventListener('mousedown', onMouseDown, false);
    dom.addEventListener('change', onChange, false);
    dom.addEventListener('focus', onFocus, false);
    dom.addEventListener('blur', onBlur, false);

    return this;

};

UI.Integer.prototype = Object.create(UI.Element.prototype);
UI.Integer.prototype.constructor = UI.Integer;

UI.Integer.prototype.getValue = function () {

    return this.value;

};

UI.Integer.prototype.setValue = function (value) {

    if (value !== undefined) {

        value = parseInt(value);

        this.value = value;
        this.dom.value = value;

    }

    return this;

};

UI.Integer.prototype.setStep = function (step) {

    this.step = parseInt(step);

    return this;

};

UI.Integer.prototype.setRange = function (min, max) {

    this.min = min;
    this.max = max;

    return this;

};

UI.Break = function () {

    UI.Element.call(this);

    var dom = document.createElement('br');
    dom.className = 'Break';

    this.dom = dom;

    return this;

};

UI.Break.prototype = Object.create(UI.Element.prototype);
UI.Break.prototype.constructor = UI.Break;


UI.HorizontalRule = function () {

    UI.Element.call(this);

    var dom = document.createElement('hr');
    dom.className = 'HorizontalRule';

    this.dom = dom;

    return this;

};

UI.HorizontalRule.prototype = Object.create(UI.Element.prototype);
UI.HorizontalRule.prototype.constructor = UI.HorizontalRule;


UI.Button = function (value) {

    UI.Element.call(this);

    var dom = document.createElement('button');
    dom.className = 'Button';

    this.dom = dom;
    this.dom.textContent = value;

    return this;

};

UI.Button.prototype = Object.create(UI.Element.prototype);
UI.Button.prototype.constructor = UI.Button;

UI.Button.prototype.setLabel = function (value) {

    this.dom.textContent = value;

    return this;

};


UI.Modal = function (value) {

    var scope = this;

    var dom = document.createElement('div');

    dom.style.position = 'absolute';
    dom.style.width = '100%';
    dom.style.height = '100%';
    dom.style.backgroundColor = 'rgba(0,0,0,0.5)';
    dom.style.display = 'none';
    dom.style.alignItems = 'center';
    dom.style.justifyContent = 'center';
    dom.addEventListener('click', function (event) {

        scope.hide();

    });

    this.dom = dom;

    this.container = new UI.Panel();
    this.container.dom.style.width = '200px';
    this.container.dom.style.padding = '20px';
    this.container.dom.style.backgroundColor = '#ffffff';
    this.container.dom.style.boxShadow = '0px 5px 10px rgba(0,0,0,0.5)';

    this.add(this.container);

    return this;

};

UI.Modal.prototype = Object.create(UI.Element.prototype);
UI.Modal.prototype.constructor = UI.Modal;

UI.Modal.prototype.show = function (content) {

    this.container.clear();
    this.container.add(content);

    this.dom.style.display = 'flex';

    return this;

};

UI.Modal.prototype.hide = function () {

    this.dom.style.display = 'none';

    return this;

};


var container = new UI.Panel();
var domobject;

var objectTypeRow = new UI.GetRow("li_type");

var objectType = new UI.Text();

objectTypeRow.add(objectType);

var objectName = new UI.GetInput("", "li_name").setWidth('150px').setFontSize('12px').onChange(function () {

    GLE_History.execute(new SetValueCommand(domobject, 'name', objectName.  getValue()));

});


var objectPositionX = new UI.GetNumber(0, "li_postionx").setWidth('137px').onChange(update);
var objectPositionY = new UI.GetNumber(0, "li_postiony").setWidth('137px').onChange(update);
var objectPositionZ = new UI.GetNumber(0, "li_postionz").setWidth('137px').onChange(update);

var objectRotationX = new UI.GetNumber(0, "li_rotatex").setStep(10).setUnit('°').setWidth('137px').onChange(update);
var objectRotationY = new UI.GetNumber(0, "li_rotatey").setStep(10).setUnit('°').setWidth('137px').onChange(update);
var objectRotationZ = new UI.GetNumber(0, "li_rotatez").setStep(10).setUnit('°').setWidth('137px').onChange(update);

var objectScaleLock = new UI.GetCheckbox(true, "li_scalelock").setPosition('absolute').setLeft('75px');
var objectScaleX = new UI.GetNumber(1, "li_scalex").setRange(0.00001, Infinity).setWidth('137px').onChange(updateScaleX);
var objectScaleY = new UI.GetNumber(1, "li_scaley").setRange(0.00001, Infinity).setWidth('137px').onChange(updateScaleY);
var objectScaleZ = new UI.GetNumber(1, "li_scalez").setRange(0.00001, Infinity).setWidth('137px').onChange(updateScaleZ);
var objectPropertyX = new UI.GetNumber(1, "li_property_length").setRange(1, Infinity).setWidth('130px').onChange(update);
var objectPropertyY = new UI.GetNumber(1, "li_property_width").setRange(1, Infinity).setWidth('130px').onChange(update);
var objectPropertyZ = new UI.GetNumber(1, "li_property_height").setRange(1, Infinity).setWidth('130px').onChange(update);

var objectVisible = new UI.GetCheckbox(false, "male").onChange(update);



function updateScaleX() {

    var object = domobject;

    if (objectScaleLock.getValue() === true) {

        var scale = objectScaleX.getValue() / object.scale.x;

        objectScaleY.setValue(objectScaleY.getValue() * scale);
        objectScaleZ.setValue(objectScaleZ.getValue() * scale);

    }

    update();

}

function updateScaleY() {

    var object = domobject;

    if (objectScaleLock.getValue() === true) {

        var scale = objectScaleY.getValue() / object.scale.y;

        objectScaleX.setValue(objectScaleX.getValue() * scale);
        objectScaleZ.setValue(objectScaleZ.getValue() * scale);

    }

    update();

}

function updateScaleZ() {

    var object = domobject;

    if (objectScaleLock.getValue() === true) {

        var scale = objectScaleZ.getValue() / object.scale.z;

        objectScaleX.setValue(objectScaleX.getValue() * scale);
        objectScaleY.setValue(objectScaleY.getValue() * scale);

    }

    update();

}

function update() {

    var object = domobject;
    object.geometry.computeBoundingBox();

    if (object !== null) {

        var newPosition = new GLE.Vector3(objectPositionX.getValue(), objectPositionY.getValue(), objectPositionZ.getValue());
        if (object.position.distanceTo(newPosition) >= 0.01) {

            GLE_History.execute(new SetPositionCommand(object, newPosition, objectPositionOnDown));

        }

        var newRotation = new GLE.Euler(objectRotationX.getValue() * GLE.Math.DEG2RAD, objectRotationY.getValue() * GLE.Math.DEG2RAD, objectRotationZ.getValue() * GLE.Math.DEG2RAD);
        if (object.rotation.toVector3().distanceTo(newRotation.toVector3()) >= 0.01) {

            GLE_History.execute(new SetRotationCommand(object, newRotation));

        }

        var newScale = new GLE.Vector3(objectScaleX.getValue(), objectScaleY.getValue(), objectScaleZ.getValue());
        if (object.scale.distanceTo(newScale) >= 0) {

            GLE_History.execute(new SetScaleCommand(object, newScale));

        }
        if (object.visible !== objectVisible.getValue()) {

            GLE_History.execute(new SetValueCommand(object, 'visible', objectVisible.getValue()));

        }
        var newProperty = new GLE.Vector3(objectPropertyX.getValue(), objectPropertyY.getValue(), objectPropertyZ.getValue());
        if (object.scale.distanceTo(newProperty) >= 0) {

            GLE_History.execute(new SetScaleCommand(object, newProperty));

        }

    }
}

function objectChanged(object) {
    if (object !== null) {
        container.setDisplay('block');
        domobject = object;

        updateUI(object);

    } else {
        container.setDisplay('none');
    }
}

function updateUI(object) {

    objectType.setValue(object.type);

    objectName.setValue(object.name);

    objectPositionX.setValue(object.position.x);
    objectPositionY.setValue(object.position.y);
    objectPositionZ.setValue(object.position.z);

    objectRotationX.setValue(object.rotation.x * GLE.Math.RAD2DEG);
    objectRotationY.setValue(object.rotation.y * GLE.Math.RAD2DEG);
    objectRotationZ.setValue(object.rotation.z * GLE.Math.RAD2DEG);

    objectScaleX.setValue(object.scale.x);
    objectScaleY.setValue(object.scale.y);
    objectScaleZ.setValue(object.scale.z);

    objectVisible.setValue(object.visible);



}
$("#ipostion_xjia").click(function () {
    objectPositionX.setValue(objectPositionX.getValue() + editorpostionunit);
    update();
});
$("#ipostion_yjia").click(function () {
    objectPositionY.setValue(objectPositionY.getValue() + editorpostionunit);
    update();
});

$("#ipostion_zjia").click(function () {
    objectPositionZ.setValue(objectPositionZ.getValue() + editorpostionunit);
    update();
});

$("#ipostion_xjian").click(function () {
    objectPositionX.setValue(objectPositionX.getValue() - editorpostionunit);
    update();
});
$("#ipostion_yjian").click(function () {
    objectPositionY.setValue(objectPositionY.getValue() - editorpostionunit);
    update();
});

$("#ipostion_zjian").click(function () {
    objectPositionZ.setValue(objectPositionZ.getValue() - editorpostionunit);
    update();
});
$("#irotate_xjia").click(function () {
    objectRotationX.setValue(objectRotationX.getValue() + editorrotateunit);
    update();
});
$("#irotate_yjia").click(function () {
    objectRotationY.setValue(objectRotationY.getValue() + editorrotateunit);
    update();
});

$("#irotate_zjia").click(function () {
    objectRotationZ.setValue(objectRotationZ.getValue() + editorrotateunit);
    update();
});

$("#irotate_xjian").click(function () {
    objectRotationX.setValue(objectRotationX.getValue() - editorrotateunit);
    update();
});
$("#irotate_yjian").click(function () {
    objectRotationY.setValue(objectRotationY.getValue() - editorrotateunit);
    update();
});

$("#irotate_zjian").click(function () {
    objectRotationZ.setValue(objectRotationZ.getValue() - editorrotateunit);
    update();
});
$("#iscale_xjia").click(function () {
    var scalexx = objectScaleX.getValue() - editorscaleunit;
    if (scalexx <= 0) {
        editorscaleunit = editorscaleunit * 0.1;
    }

    if (objectScaleLock.getValue() === true) {
        objectScaleX.setValue(objectScaleX.getValue() + editorscaleunit);
        objectScaleY.setValue(objectScaleY.getValue() + editorscaleunit);
        objectScaleZ.setValue(objectScaleZ.getValue() + editorscaleunit);
    } else {
        objectScaleX.setValue(objectScaleX.getValue() + editorscaleunit);
    }

    update();
});
$("#iscale_yjia").click(function () {
    var scalexx = objectScaleX.getValue() - editorscaleunit;
    if (scalexx <= 0) {
        editorscaleunit = editorscaleunit * 0.1;
    }

    if (objectScaleLock.getValue() === true) {
        objectScaleX.setValue(objectScaleX.getValue() + editorscaleunit);
        objectScaleY.setValue(objectScaleY.getValue() + editorscaleunit);
        objectScaleZ.setValue(objectScaleZ.getValue() + editorscaleunit);
    } else {
        objectScaleY.setValue(objectScaleY.getValue() + editorscaleunit);
    }
    update();
});

$("#iscale_zjia").click(function () {
    var scalexx = objectScaleX.getValue() - editorscaleunit;
    if (scalexx <= 0) {
        editorscaleunit = editorscaleunit * 0.1;
    }

    if (objectScaleLock.getValue() === true) {
        objectScaleX.setValue(objectScaleX.getValue() + editorscaleunit);
        objectScaleY.setValue(objectScaleY.getValue() + editorscaleunit);
        objectScaleZ.setValue(objectScaleZ.getValue() + editorscaleunit);
    } else {
        objectScaleZ.setValue(objectScaleZ.getValue() + editorscaleunit);
    }
    update();
});

$("#iscale_xjian").click(function () {

    var scalexx = objectScaleX.getValue() - editorscaleunit;
    if (scalexx <= 0) {
        editorscaleunit = editorscaleunit * 0.1;
    }

    if (objectScaleLock.getValue() === true) {
        objectScaleX.setValue(objectScaleX.getValue() - editorscaleunit);
        objectScaleY.setValue(objectScaleY.getValue() - editorscaleunit);
        objectScaleZ.setValue(objectScaleZ.getValue() - editorscaleunit);
    } else {
        objectScaleX.setValue(objectScaleX.getValue() - editorscaleunit);
    }
    update();
});
$("#iscale_yjian").click(function () {
    var scalexx = objectScaleX.getValue() - editorscaleunit;
    if (scalexx <= 0) {
        editorscaleunit = editorscaleunit * 0.1;
    }

    if (objectScaleLock.getValue() === true) {
        objectScaleX.setValue(objectScaleX.getValue() - editorscaleunit);
        objectScaleY.setValue(objectScaleY.getValue () - editorscaleunit);
        objectScaleZ.setValue(objectScaleZ.getValue() - editorscaleunit);
    } else {
        objectScaleY.setValue(objectScaleY.getValue() - editorscaleunit);
    }
    update();
});

$("#iscale_zjian").click(function () {
    var scalexx = objectScaleX.getValue() - editorscaleunit;
    if (scalexx <= 0) {
        editorscaleunit = editorscaleunit * 0.1;
    }
    if (objectScaleLock.getValue() === true) {
        objectScaleX.setValue(objectScaleX.getValue() - editorscaleunit);
        objectScaleY.setValue(objectScaleY.getValue() - editorscaleunit);
        objectScaleZ.setValue(objectScaleZ.getValue() - editorscaleunit);
    } else {
        objectScaleZ.setValue(objectScaleZ.getValue() - editorscaleunit);
    }
    update();
});


